const fs = require("fs")
var txt = "这首诗抓住了边塞风光景物的一些特点，借其严寒春迟及胡笳声声来写战士们的心理活动，反映了边关将士的生活状￼况。诗风苍凉悲壮，但并不低沉，以侠骨柔情为壮士之声，这仍然是盛唐气象的回响。"
//在文件原有内容后面追加内容，所以定义文件权限为“a”￼
var decr = fs.createWriteStream("凉州词.txt", {flags: "a"})
decr.write("\n鉴赏:\n" + txt, "utf8")                     //写入内容​​
// 除了在write方法指定编码外，可以使用setDefaultEncoding方法设置编码
// decr.setDefaultEncoding("utf8")
// decr.write("\n鉴赏:\n" + txt)

// 关闭流
//decr.end("\n 写入成功 关闭流")
//Error [ERR_STREAM_WRITE_AFTER_END]: write after end

/*
> 上面代码运行后，将会导致demo.txt文件中没有任何数据，因为虽然第4行代码中使用write()方法写入了数据，但由于紧接着销毁了写入流，这将导致使用该流执行的任何操作都会失效。因此，在使用写入流销毁操作时，通常在异常处理中使用该操作。
> 注意
> 一旦流被销毁，就无法对其进行任何操作，并且销毁流时，使用write()方法写入的数据可能并没有完成使用，这可能触发ERR_STREAM_DESTROYED错误，因此如果数据在关闭之前需要刷新，建议使用end()方法而不是destroy()方法。
*/
decr.destroy()


const stream = require('stream');
const writable = new stream.Writable({
    write: function (chunk, encoding, next) {
        console.log(chunk.toString());
        next();
    }
});
writable.write('天气晴朗');
//使用写入流的cork()方法可以强制把所有写入的数据都缓冲到内存中，它的主要目的是为了适应将几个数据快速连续地写入流的情况。cork()方法不会立即将它们转发到底层目标处，而是缓冲所有数据块，直到调用uncork()方法
writable.cork();
writable.write('阳光明媚');
//前面介绍了cork()方法，用以强制把所有写入的数据都缓冲到内存中，而使用uncork()方法可以将调用cork()方法后缓冲的所有数据输出到目标处。
writable.uncork();